/* ************************************************************************

   Copyright: Juan Antonio Aldea Armenteros

   License: GPL v3

   Authors: Juan Antonio Aldea Armenteros

************************************************************************ */

/* ************************************************************************

#asset(jabber/*)

************************************************************************ */

qx.Class.define("jabber.Application",
{
  extend : qx.application.Standalone,

  members :
  {
    __loginForm : null,
    __conexion : null,
    __listaContactos : null,
    __resizer : null,
    __conectar : null,
    __desconectar : null,
    __herramientas : null,


    /**
     * TODOC
     *
     * @return {void}
     */
    main : function()
    {
      // Call super class
      this.base(arguments);

      // Enable logging in debug variant
      if (qx.core.Environment.get("qx.debug"))
      {
        // support native logging capabilities, e.g. Firebug for Firefox
        qx.log.appender.Native;

        // support additional cross-browser console. Press F7 to toggle visibility
        qx.log.appender.Console;
      }

      /****************************************/
      this.__loginForm = new jabber.LoginForm();
      this.__conexion = new jabber.Conexion();
      this.__herramientas = new qx.ui.toolbar.ToolBar();
      this.__conectar = new qx.ui.toolbar.Button("Conectar");
      this.__desconectar = new qx.ui.toolbar.Button("Desconectar");
      this.__herramientas.add(this.__conectar);
      this.__herramientas.add(this.__desconectar);
      this.__resizer = new qx.ui.container.Resizer();
      this.__desconectar.setEnabled(false);

      //this.__resizer = new qx.ui.container.Composite();
      this.__resizer.set(
      {
        width  : 500,
        height : 500
      });

      this.__resizer.setLayout(new qx.ui.layout.VBox());
      this.__resizer.add(this.__herramientas);

      this.getRoot().add(this.__resizer,
      {
        left : 20,
        top  : 20
      });

      this.__conexion.addListener('estadoConectando', function(e) {}, this);

      this.__conexion.addListener("estadoAutentificando", function(e) {}, this);

      this.__conexion.addListener("estadoConectado", function(e)
      {
        this.__desconectar.setEnabled(true);
        this.__listaContactos = new jabber.Pestaniero(this.__conexion.jid());
        this.__resizer.add(this.__listaContactos);

        this.__listaContactos.addListener("enviarMensaje", function(mensaje) {
          this.__conexion.enviar_mensaje(mensaje.getData());
        }, this);
      },
      this);

      this.__conexion.addListener("rosterItemRecibido", function(item)
      {
        var datos = item.getData();
        this.__listaContactos.addContacto(datos.jid, datos.nombre, "offline");
      },
      this);

      this.__conexion.addListener("actualizarPresencia", function(presencia)
      {
        var datosPresencia = presencia.getData();
        var bareid = Strophe.getBareJidFromJid(datosPresencia.jid);
        var contacto = this.__listaContactos.buscarContacto(bareid);

        if (contacto != null)
        {
          console.log("Actualizando contacto " + bareid);
          contacto.setJid(bareid);
          contacto.setEstado(datosPresencia.presencia);
        }
      },
      this);

      this.__conexion.addListener("nuevoMensaje", function(mensajeCompleto)
      {
        console.log("mensaje en app");
        var broza = mensajeCompleto.getData();
        console.log(broza.jid + " " + broza.mensaje);
        this.__listaContactos.nuevoMensaje(broza);
      },
      this),

      this.__loginForm.addListener("aceptar", function(e)
      {
        this.__conexion.conectar(e.getData());
        this.__conectar.setEnabled(false);
      },
      this)

      this.__conectar.addListener('execute', function(e) {
        this.__loginForm.open();
      }, this);

      this.__desconectar.addListener('execute', function(e)
      {
        this.__conexion.desconectar();
        this.__conectar.setEnabled(true);
        this.__desconectar.setEnabled(false);

        if (this.__listaContactos != null) {
          this.__resizer.remove(this.__listaContactos);
        }
      },
      this);

      this.__conexion.addListener('estadoDesconectado', function(e)
      {
        this.__conectar.setEnabled(true);
        this.__desconectar.setEnabled(false);
      },
      this);

      this.__conexion.addListener('estadoErrorAutentificacion', function(e)
      {
        this.__conectar.setEnabled(true);
        this.__desconectar.setEnabled(false);
      },
      this);

      this.__conexion.addListener('estadoErrorConexion', function(e)
      {
        this.__conectar.setEnabled(true);
        this.__desconectar.setEnabled(false);
      },
      this);

      this.__conexion.addListener('estadoErrorDesconocido', function(e)
      {
        this.__conectar.setEnabled(true);
        this.__desconectar.setEnabled(false);
      },
      this);
    }
  }
});